package ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.combobox;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import ar.uba.fi.taller2.cmmiassistant.controlador.Controlador;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.Item;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.comparators.NombrePracticaComparator;
import ar.uba.fi.taller2.cmmiassistant.frontend.adaptadores.etiquetas.EtiquetaBeanProperty;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.AreaProceso;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.Objetivo;
import ar.uba.fi.taller2.cmmiassistant.modelo.cmmi.Practica;
import ar.uba.fi.taller2.cmmiassistant.modelo.evaluacion.Evaluacion;
import ar.uba.fi.taller2.cmmiassistant.observador.ServicioNotificacion;

public class ComboBoxModelPracticas extends ComboBoxModelAdapter {

    private final List<Practica> practicas = new ArrayList<Practica>();

    public ComboBoxModelPracticas() {

    }

    public Controlador getControlador() {

        return this.controlador;
    }

    public void setControlador(Controlador controlador) {

        super.setControlador(controlador);

        ServicioNotificacion.addObservador(this.getControlador().getModelo()
                .getAreaProcesoSeleccionada(), this);
        ServicioNotificacion.addObservador(this.getControlador().getModelo()
                .getObjetivoSeleccionado(), this);

    }

    protected void actualizarItems() {

        this.getItems().clear();

        Evaluacion evaluacion = this.getControlador().getModelo()
                .getEvaluacionSeleccionada().getValor();

        AreaProceso areaProceso = this.getControlador().getModelo()
                .getAreaProcesoSeleccionada().getValor();

        Objetivo objetivo = this.getControlador().getModelo()
                .getObjetivoSeleccionado().getValor();

        if ((evaluacion != null) && (areaProceso != null) && (objetivo != null)) {

            this.getPracticas().clear();
            evaluacion.getRepresentacion().getPracticas(objetivo,
                    this.getPracticas());
            Collections.sort(this.getPracticas(), NombrePracticaComparator
                    .instance());

            for (Practica practica : this.getPracticas()) {

                Item item = new Item(new EtiquetaBeanProperty(practica,
                        "nombre"));
                this.getItems().add(item);
            }
        }
    }

    public List<Practica> getPracticas() {

        return this.practicas;
    }
    
    public Practica getPractica(int index) {
        
        return index >= 0 ? this.getPracticas().get(index) : null;
    }

    public int indexOf(Practica practica) {
        
        return this.getPracticas().indexOf(practica);
    }
}
